package com.my.fss.common.mapper;

import java.util.List;
import java.util.Map;

/**
 *
 * @Author Liuhx
 * @Description DAO基类
 * @Date 2020-1-16
 * 添加、修改、删除都走主库
 * find开头的查询都走主库，如：find()、findList()、findCount()
 * query开头的查询都走主库，如：query()、queryList()、queryCount()、queryMax()、querySum()、queryGroup()
 * 若自己在Mpper 文件中新增查询方法，需要以 find 或者 query 开头
 */
public interface BaseMapper<T> {
    // 主库方法

    /**
     * @Author Liuhx
     * @Description 新增
     * @Date 2020-1-16
     * @param object
     */
    public int isSave(T object);

    /**
     * @Author Liuhx
     * @Description 通过id删除对象（int主键）
     * @Date 2020-1-16
     * @param id
     */
    public void isDeleteByIntId(Integer id);

    /**
     * @Author Liuhx
     * @Description 通过id删除对象（Long主键）
     * @Date 2020-1-16
     * @param id
     */
    public int isDeleteLongId(Long id);

    /**
     * @Author Liuhx
     * @Description 通过id删除对象（uuid主键）
     * @Date 2020-1-16
     * @param uuid
     */
    public void isDeleteByUuid(String uuid);

    /**
     * @Author Liuhx
     * @Description 通过其他值删除对象
     * @Date 2020-1-16
     * @param object
     */
    public void isDeleteByObject(Object object);

    /**
     * @Author Liuhx
     * @Description 通过id集合批量删除记录
     * @Date 2020-1-16
     * @param maps
     * @return
     */
    int isDeleteByIds(Map<String, List<String>> maps);

    /**
     * @Author Liuhx
     * @Description 通过id删除记录
     * @Date 2020-1-16
     * @param id
     * @return
     */
    public int isDeleteById(String id);

    /**
     * @Author Liuhx
     * @Description 通过对象更新对象
     * @Date 2020-1-16
     * @param object
     * @return
     */
    public void isUpdate(T object);

    /**
     * @Author Liuhx
     * @Description 通过id查找对象（int主键）
     * @Date 2020-1-16
     * @param obj_id
     * @return
     */
    public T findByIntId(Integer obj_id);

    /**
     * @Author Liuhx
     * @Description 通过id查找对象（Long主键）
     * @Date 2020-1-16
     * @param obj_id
     * @return
     */
    public T findByLongId(Long obj_id);

    /**
     * @Author Liuhx
     * @Description 通过id查找对象（uuid主键）
     * @Date 2020-1-16
     * @param uuid
     * @return
     */
    public T findByUuid(String uuid);

    /**
     * @Author Liuhx
     * @Description 通过id查找对象（String 主键）
     * @Date 2020-1-16
     * @param id
     * @return
     */
    public T findById(String id);

    /**
     * @Author Liuhx
     * @Description 通过其他查找对象
     * @Date 2020-1-16
     * @param object
     * @return
     */
    public T findByObject(Object object);


    /**
     * @Author Liuhx
     * @Description 分页查询
     * @return			查询对象列表
     * @Date 2020-1-16
     */

    /**
     * @Author Liuhx
     * @Description 查询所有数据数量
     * @return
     * @Date 2020-1-16
     */
    public long findCount();

    /**
     * @Author Liuhx
     * @Description 按条件查询列表中某一字段最大值（主库）
     * @param maxColumn	查询最大值列的字段名称
     * @return			最大值，没查到返回0
     */
    public long findMax(String maxColumn);

    /**
     * @Author Liuhx
     * @Description 按条件累加列表中某一字段（主库）
     * @param sumColumn	累加列的字段名称
     * @return			累加之和，没查到返回0
     */
    public long findSum(String sumColumn);


    // 从库方法
    /**
     * @Author Liuhx
     * @Description 通过id查找对象（int主键）
     * @Date 2020-1-16
     * @param obj_id
     * @return
     */
    public T queryByIntId(Integer obj_id);

    /**
     * @Author Liuhx
     * @Description 通过id查找对象（Long主键）
     * @Date 2020-1-16
     * @param obj_id
     * @return
     */
    public T queryByLongId(Long obj_id);

    /**
     * @Author Liuhx
     * @Description 通过id查找对象（uuid主键）
     * @Date 2020-1-16
     * @param uuid
     * @return
     */
    public T queryByUuid(String uuid);

    /**
     * @Author Liuhx
     * @Description 通过其他字段值查找对象
     * @Date 2020-1-16
     * @param object
     * @return
     */
    public T queryByObject(Object object);

    /**
     * @Author Liuhx
     * @Description 通过多条件查找
     * @Date 2020-1-16
     * @param map
     * @return
     */
    public  List<T> queryListByMap(Map<String, Object> map);

    /**
     * @Author Liuhx
     * @Description 分页查询
     * @param start		从第几条开始查
     * @param end		一共查多少条
     * @return			查询对象列表
     * @Date 2020-1-16
     */
    public List<T> queryList(int start, int end);

    /**
     * @Author Liuhx
     * @Description 查询所有数据数量
     * @return
     * @Date 2020-1-16
     */
    public long queryCount();

    /**
     * @Author mengft
     * @Description 查询指定条件数据数量
     * @return
     * @Date 2020-3-12
     */
    public long queryCountByMap(Map<String, Object> map);

    /**
     * 按条件查询列表中某一字段最大值（从库）
     * @param maxColumn	查询最大值列的字段名称
     * @return			最大值，没查到返回0
     */
    public long queryMax(String maxColumn);

    /**
     * 按条件累加列表中某一字段（从库）
     * @param sumColumn	累加列的字段名称
     * @return			累加之和，没查到返回0
     */
    public long querySum(String sumColumn);
}
